#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
#include <QInputDialog>
#include <QDebug>

#include "dialog.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{
    Dialog* dialog = new Dialog(this);
    dialog->resize(400, 300);
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    //
    dialog->show(); // 非模态对话框，可以同时与父窗口交互
    // dialog->exec(); // 模态对话框，不可以同时与父窗口交互
}

void MainWindow::on_pushButton_2_clicked()
{
    // 创建QMessageBox
    QMessageBox* messageBox = new QMessageBox(this);
    messageBox->setWindowTitle("对话框窗口标题");
    messageBox->setText("这是对话框的文本");
    messageBox->setIcon(QMessageBox::Warning);
    // 标准按钮中, 根本就没法进行信号槽的连接. (按钮是 QMessageBox 自己生成的)
    messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);

    // QPushButton* button = new QPushButton("按钮", messageBox);
    // messageBox->addButton(button, QMessageBox::AcceptRole);

    // 非模态的弹框. QMessageBox 使用场景更多的是模态的.
    // messageBox->show();

    // 弹出模态对话框, 当对话框处于弹出状态的时候, 代码就会在 exec 这里阻塞. 一直到对话框被关闭.
    // 用户点击按钮, 使对话框关闭之后, 此时就能通过 exec 的返回值, 来知道用户点击的是哪个按钮, 从而执行一些对应的逻辑了.
    int result = messageBox->exec();

    if (result == QMessageBox::Ok) {
        qDebug() << "OK";
    } else if (result == QMessageBox::Save) {
        qDebug() << "Save";
    } else if (result == QMessageBox::Cancel) {
        qDebug() << "Cancel";
    }

    // delete messageBox;
    messageBox->setAttribute(Qt::WA_DeleteOnClose);
}

void MainWindow::on_pushButton_3_clicked()
{
    int result = QMessageBox::information(this, "对话框标题", "对话框文本", QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);

    if (result == QMessageBox::Ok) {
        qDebug() << "OK";
    } else if (result == QMessageBox::Save) {
        qDebug() << "Save";
    } else if (result == QMessageBox::Cancel) {
        qDebug() << "Cancel";
    }
}

void MainWindow::on_pushButton_4_clicked()
{
    // QColorDialog* dialog = new QColorDialog(this);
    // dialog->exec();
    // delete dialog;

    // 函数的返回值就是用户选择的颜色.
    QColor color = QColorDialog::getColor(QColor(0, 255, 0), this, "选择颜色");
    qDebug() << color;

    // 可以基于用户选择的颜色, 修改窗口的背景色.
    // 可以通过 QSS 的方式设置背景色.
    // QString style = "background-color: rgb(" + QString::number(color.red()) + ", " + QString::number(color.green())
    //         + ", " + QString::number(color.blue()) + ");";

    // 两种方式选一种即可
    char style[1024] = { 0 };
    sprintf(style, "background-color: rgb(%d, %d, %d);", color.red(), color.green(), color.blue());
    this->setStyleSheet(style);
}

void MainWindow::on_pushButton_5_clicked()
{
    QString filePath = QFileDialog::getOpenFileName(this);
    qDebug() << filePath;
}

void MainWindow::on_pushButton_6_clicked()
{
    QString filePath = QFileDialog::getSaveFileName(this);
    qDebug() << filePath;
}

void MainWindow::on_pushButton_7_clicked()
{
    bool ok = false;
    QFont font = QFontDialog::getFont(&ok);
    qDebug() << "ok= " << ok;
    qDebug() << font.family();
    qDebug() << font.pointSize();
    qDebug() << font.bold();
    qDebug() << font.italic();

    ui->pushButton_7->setFont(font);

}

void MainWindow::on_pushButton_9_clicked()
{
    int result = QInputDialog::getInt(this, "整数输入对话框", "请输入一个整数: ");
    qDebug() << result;
}

void MainWindow::on_pushButton_8_clicked()
{
    double result = QInputDialog::getDouble(this, "浮点数输入对话框", "请输入一个浮点数: ");
    qDebug() << result;
}

void MainWindow::on_pushButton_10_clicked()
{
    QStringList items;
    items.push_back("111");
    items.push_back("222");
    items.push_back("333");
    items.push_back("444");
    QString item = QInputDialog::getItem(this, "条目输入对话框", "请输入条目: ", items);
    qDebug() << item;
}
